export default (url, methods, datas) => {
  return new Promise((resolve, reject) => {
    let type;
    let data;
    let method;
    if (methods === 'POST_F') { // 表单提交，这里可以对请求的数据进行封装，普通post不需要这步操作
      type = 'multipart/form-data; boundary=XXX';
      let result = ''
      for (let name of Object.keys(datas)) {
        let value = datas[name];
        result +=
          '\r\n--XXX' +
          '\r\nContent-Disposition: form-data; name=\"' + name + '\"' +
          '\r\n' +
          '\r\n' + value
      }
      result += '\r\n--XXX--'
      data = result;
      method = 'POST';
    } else if (methods === 'POST_J') {
      type = 'application/json';
      data = datas;
      method = 'POST';
    } else {
      type = 'application/x-www-form-urlencoded';
      data = datas;
      method = methods;
    }
    wx.request({
      url,
      method,
      data,
      header: {
        "Authorization": 'Bearer ' + (wx.getStorageSync('token') || ""), // 登录后获取的
        'content-type': type // 默认值
      },
      success(res) {
        const data = res.data // 这里返回数据自定义返回需要的部分就可以了
        if (data?.code == 401) { // 这里可以对请求的状态进行判断，做出相应的动作，登录过期，去登陆
          wx.setStorageSync('token', '')
          // getApp().hasPermi().then(res => {
          //   reject('401');
          // });
          reject()
          return
        }
        if (data?.code !== 0 && data.code !== 200 && data.code !== 999) {
          wx.showToast({
            title: data.msg || '内部错误',
            duration: 2500,
            icon: 'none'
          })
          reject()
          return;
        }
        if (data.code === 999) {
          reject(data.msg)
          return;
        }
        resolve(data)
      },
      fail(err) { // 请求失败后判断状态码，如果是登录问题就去登录
        reject(err)
      }
    })
  })
}